<?php
    ini_set('date.timezone','Asia/Shanghai');
    ini_set('display_errors', '0');

    require_once "../lib/WxPay.Api.php";
    require_once '../lib/WxPay.Notify.php';
    require_once 'log.php';

//初始化日志
    $logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
    $log = Log::Init($logHandler, 15);

    class PayNotifyCallBack extends WxPayNotify
    {
        //查询订单
        public function Queryorder($transaction_id)
        {
            $log = "";
            $input = new WxPayOrderQuery();
            $input->SetTransaction_id($transaction_id);
            $result = WxPayApi::orderQuery($input);
            Log::DEBUG("query:" . json_encode($result));
            if(array_key_exists("return_code", $result)
                && array_key_exists("result_code", $result)
                && $result["return_code"] == "SUCCESS"
                && $result["result_code"] == "SUCCESS")
            {

                $order_id = $result['out_trade_no'];
                $transaction_id = $result["transaction_id"];

                $url = "http://www.yjshwl.cn/m2mplatform/index.php?g=wulian&m=index&a=notify";
                $data = array(
                    "order_number"=>$order_id,
                    "price"=>round($result['total_fee'] / 100,2),
                    "transaction_id"=>$transaction_id,
                );
                Log::DEBUG("进来了|order_id:".$order_id."|".$url."|".json_encode($data));
                $result  = $this->_post_url_post_data($url,$data);
                Log::DEBUG("结果|".$result);
                return true;
            }
            return false;
        }

        /**
         * curl post获取数据
         */

        function _post_url_post_data($url,$data = array()){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            // post数据
            curl_setopt($ch, CURLOPT_POST, 1);
            // post的变量
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            $output = curl_exec($ch);
            curl_close($ch);
//            $result = json_decode($output,true);
            return $output;
        }

        //重写回调处理函数
        public function NotifyProcess($data, &$msg)
        {
            Log::DEBUG("call back:" . json_encode($data));
            $notfiyOutput = array();

            if(!array_key_exists("transaction_id", $data)){
                $msg = "输入参数不正确";
                return false;
            }
            //查询订单，判断订单真实性
            if(!$this->Queryorder($data["transaction_id"])){
                $msg = "订单查询失败";
                return false;
            }
            return true;
        }
    }

    Log::DEBUG("begin notify");
    $notify = new PayNotifyCallBack();
    $notify->Handle(false);
